From: Carlos Garnacho Date: Thu, 6 Feb 2020 12:25:20 +0000 (+0100) Subject: magnifier: Implement pointer motion tracking differently X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~777^2^2~154 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=83d083f189607a095371e650836ab3dba444c6b9;p=gnome-shell.git magnifier: Implement pointer motion tracking differently The use of the core idle monitor means that focus change events are also delayed by keyboard interaction. Since the magnifier is already in the business of pointer tracking, it's easy enough to fire the pointer rest timeout from here, so focus changes are accumulated and delayed. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984 --- diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index 0ddfbc193..2cb398455 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -1133,6 +1133,13 @@ var ZoomRegion = class ZoomRegion { return this._screenPosition; } + _clearScrollContentsTimer() { + if (this._scrollContentsTimerId !== 0) { + GLib.source_remove(this._scrollContentsTimerId); + this._scrollContentsTimerId = 0; + } + } + /** * scrollToMousePos: * Set the region of interest based on the position of the system pointer. @@ -1146,28 +1153,29 @@ var ZoomRegion = class ZoomRegion { else this._updateMousePosition(); + this._clearScrollContentsTimer(); + this._scrollContentsTimerId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, POINTER_REST_TIME, () => { + this._followingCursor = false; + if (this._xDelayed !== null && this._yDelayed !== null) { + this._scrollContentsToDelayed(this._xDelayed, this._yDelayed); + this._xDelayed = null; + this._yDelayed = null; + } + + return GLib.SOURCE_REMOVE; + }); + // Determine whether the system mouse pointer is over this zoom region. return this._isMouseOverRegion(); } - _clearScrollContentsTimer() { - if (this._scrollContentsTimerId != 0) { - GLib.source_remove(this._scrollContentsTimerId); - this._scrollContentsTimerId = 0; - } - } - _scrollContentsToDelayed(x, y) { - if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) { + if (this._followingCursor) { + this._xDelayed = x; + this._yDelayed = y; + } else { this.scrollContentsTo(x, y); - return; } - - this._clearScrollContentsTimer(); - this._scrollContentsTimerId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, POINTER_REST_TIME, () => { - this._scrollContentsToDelayed(x, y); - return GLib.SOURCE_REMOVE; - }); } /**